#_*_coding: utf-8_*_
import requests
from requests.exceptions import RequestException
from multiprocessing import Pool
import re
import json
from fake_useragent import UserAgent

#获取单个网页的HTML代码
def get_one_page(url):
    #生成请求头信息
    headers={"User-Agent":UserAgent().random}
    try:
        #请求网站信息
        response=requests.get(url,headers=headers)
        #判断返回状态码是否是200
        if response.status_code==200:
            #正确请求后，返回网页HTML信息
            return response.text
        else:
            #未正确请求，返回为空
            return None
    #捕获异常，出现异常，返回为空
    except RequestException:
        return None

#解析单个网页
def parse_one_page(html):
    #编写正则表达式，获取序号、电影名称、主演、上映时间
    pattern=re.compile('<dd>.*?board-index.*?">(.*?)</i>.*?title="(.*?)".*?"star">(.*?)</p>.*?"releasetime">(.*?)</p>.*?</dd>',re.S)
    results=re.findall(pattern,html)
    #构建字典，返回生成器
    for result in results:
        yield {
            "序号":result[0].strip(),
            "电影名字":result[1].strip(),
            "演员":result[2].strip()[3:],
            "上映时间":result[3].strip()[5:]
        }

#将内容写入文件
def write_to_file(content):
    with open("result.txt","a",encoding="utf-8") as f:
        #把字典转换成字符串写入文件
        f.write(json.dumps(content,ensure_ascii=False)+"\n")
        f.close()

def main(offset):
    url="http://maoyan.com/board/4?offset="+str(offset)
    html=get_one_page(url)
    for item in parse_one_page(html):
        print(item)
        write_to_file(item)

if __name__=="__main__":
    #利用多进程，使用数据并行抓取
    pool=Pool()
    pool.map(main,[i*10 for i in range(10)])